/*
 * @Author: quit
 * @Date: 2023-03-07 15:57:16
 * @LastEditTime: 2023-03-17 02:56:21
 * @Descripttion: 数据类型
 * @notice:
 */

/**
 * @description: 数字类型
 * 1. 数字类型使用number , 在TS中表示双精度64位浮点值,这里整数与分数都可以使用number
 */

let num_1: number = 0b10101;
let num_2: number = 0o10101;
let num_3: number = 10101;
let num_4: number = 0x0ff;
console.log(num_1, num_2, num_3, num_4);

/**
 * @description: 字符串
 * 字符串使用 string , 和JS一样 单引号 双引号 反引号 都可以表示字符串
 * 其中反引号比较特殊可以使用 ${} 将变量引入
 */

let string_1: string = '单引号';
let string_2: string = '双引号';
let string_3: string = `反引号,${string_2}`;
console.log(string_1, string_2, string_3);

/**
 * @description:布尔值
 * 使用 boolean , 只有2个值 true false
 */

let bl: boolean = true;

/**
 * @description: 特殊类型
 * null \ undefined
 * 在 JS 中这两个值相等;类型不一样
 * 在 TS 中是任意类型的子类型
 * null 表示在栈中的变量没有指定堆中的内存地址,作用是将作为一个释放对象
 * undefined
 */
console.log(null == undefined); // true
console.log(null === undefined); // false

// 如果在使用发现报错,这里需要注意在配置文件tsconfig.json中strictNullChecks属性是否进行了设置
num_1 = null;
string_1 = undefined;

/**
 * @description: void 类型
 * 表示当前没有任何类型,一般使用在函数没有返回值时
 */

function func(): void {
    console.log('一个打印,没有返回值');
}
func();

/**
 * @description: enum 枚举类型
 * 给一个没有意义的数据赋予一个友好的名字
 * 默认从0开始,也可以手动赋值
 */
// enum colors {
//   red, // 默认是0
//   green, // 1
//   blue, // 2
// }
// let c1: colors = colors.blue;
// console.log(c1); // 2

enum colors {
    red,
    green = 3,
    blue
}
let c1: colors = colors.blue;
console.log(c1); // 4

/**
 * @description: 数组 和 元组
 * 数组 -- 同一类型数据值的集合
 * 元组 -- 不同类型数据值的集合
 */

// TS 生成数组的方式1
let listNumber: number[];
listNumber = [1, 2, 3];
// 方式2 数组泛型
let listString: Array<string> = ['1', '2', '3'];
// 方式3 利用接口表示数组 ; 索引签名 ; 可以看作是一个自己定义的类型与构造函数类似
interface SelfArray {
    [index: number]: number;
}
let selfList: SelfArray = [6, 5, 4];
console.log(listNumber, listString, selfList);

// 定义元组,需要手动确定组类每一个元素的类型
let _list: [number, string] = [1, '2'];

/**
 * @description: Any 和 Object 类型
 * Any 类型可以是任何值 允许我们在编译时移除类型检查
 * Object 类型 允许我们赋值任何类型;
 */

let notSure: any;
notSure = 1;
notSure = '2';
notSure = true;
notSure = undefined;
notSure = 1.23456;
notSure.toFixed(1);

let _notSure: Object = 7.89;
// _notSure.toFixed(1); // error;上面any之所以可以使用是使用原型链的形式查找的number原型上的方法
_notSure.toString(); // 调用Object自己原型上的方法是可以的

export {};
